home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / misc / DReg.lha / DReg / launch.i < prev    next >
Text File  |  1994-06-26  |  3KB  |  121 lines

  1. * This piece of code detaches the program from the CLI and
  2. * launches it as a separate process in its own right.
  3.  
  4. * Command line parameters now passed in normal way!
  5.  
  6. * WorkBench startup added by Phineas, 23-mar-94
  7.  
  8.  
  9.         section    Launcher,CODE
  10.  
  11.  
  12. Launch:        move.l    a0,_aARGV    save entry parameters
  13.         move.l    d0,_aARGC
  14.  
  15.         sub.l    a1,a1
  16.         CALLEXEC FindTask    find  this task
  17.         move.l    d0,a4
  18.  
  19.         tst.l    172(a4)        check origins, pr_CLI
  20.         beq    fromWorkbench    no need to detach if from WB
  21.  
  22. ; If we get this far we are from CLI. Copy command line for user.
  23.  
  24.         move.l    _aARGC,d0    size of cmd line
  25.         moveq.l    #0,d1        any old memory will do
  26.         CALLEXEC AllocMem    get memory
  27.         tst.l    d0        test return
  28.         beq.s    Abort_1        quit on error
  29.  
  30.         move.l    _aARGV,a0    source
  31.         move.l    d0,_aARGV    save addr of copy
  32.         move.l    d0,a1        destination
  33.         move.l    _aARGC,d0    size
  34.         CALLEXEC CopyMem    copy it
  35.  
  36. ; continue with DE's launch code from here on in.
  37.  
  38.         move.l    4.w,a6        ;ExecBase
  39.  
  40.         lea    LDos(pc),a1
  41.         moveq    #0,d0
  42.         jsr    _LVOOpenLibrary(a6)
  43.         tst.l    d0        ;got DOS lib?
  44.         beq.s    Abort_1        ;exit if so
  45.  
  46.         move.l    d0,a6        ;DOS library base
  47.  
  48.         lea    Launch(pc),a4    ;point to start of Launcher
  49.         subq.w    #4,a4    ;point to 1st Segment in list
  50.         move.l    (a4),d0        ;get BCPL ptr to next
  51.  
  52.         move.l    d0,d3        ;ptr to next segment for DOS call
  53.         clr.l    (a4)        ;unlink the segments (tut, tut)
  54.  
  55.         lea    LaunchName(pc),a0    ;name of new process
  56.         move.l    a0,d1            ;goes here
  57.  
  58.         moveq    #0,d2        ;process pri
  59.         move.l    #4000,d4    ;stack size
  60.  
  61.         jsr    _LVOCreateProc(a6)    ;create process
  62.  
  63.         move.l    a6,a1
  64.         move.l    4.w,a6
  65.         jsr    _LVOCloseLibrary(a6)    ;close DOS library
  66.  
  67.         moveq    #0,d0        ;signal launched
  68.         rts
  69.  
  70.  
  71. * Come here if no DOS library (ouch! usually means a repair bill...)
  72.  
  73.  
  74. Abort_1:    moveq    #20,d0        ;signal failed!
  75.         rts            ;(CLI returncode)
  76.  
  77. OurTsk        dc.l    0                our task's address
  78. LDos        dc.b    "dos.library",0
  79.  
  80. LaunchName    dc.b    "regi_main",0    ;change this to suit yourself!
  81.         even
  82.  
  83. ; Called from WorkBench - run program, then reply message and exit!
  84.  
  85. fromWorkbench:
  86.         move.l    a4,OurTsk        save task address 
  87.         jsr        _yourMain        run the program
  88.         movea.l    OurTsk,a4        restore task address for message port
  89.  
  90.         lea    92(a4),a0        pr_MSGPORT
  91.         CALLEXEC WaitPort        wait for a message
  92.         lea    92(a4),a0        pr_MSGPORT
  93.         CALLEXEC GetMsg            then get it
  94.         move.l    d0,-(sp)        save it for later reply
  95.         CALLEXEC Forbid            system does the Permit() L8R
  96.         move.l    (sp)+,a1
  97.         CALLEXEC ReplyMsg        reply the message
  98.         rts                quit
  99.  
  100.         section    Program,CODE
  101.  
  102.         move.l    _aARGV,a0    a0->copy of command line
  103.         move.l    _aARGC,d0    d0=it's length
  104.         bsr.s    _yourMain    call users application
  105.  
  106.         move.l    d0,-(sp)    save DOS return address
  107.         move.l    _aARGV,a1    address
  108.         move.l    _aARGC,d0    size
  109.         CALLEXEC FreeMem    release it
  110.         move.l    (sp)+,d0    restore return value
  111.         rts
  112.  
  113. _aARGV        dc.l    0
  114. _aARGC        dc.l    0
  115.  
  116.  
  117. _yourMain:
  118.  
  119. * Your program goes here!
  120.  
  121.